
using System;
using System.Collections.Generic;

namespace WindowsFormsApplication1
{


	public class AnalisadorHiperCubo:Analisador
	{
		private int[] anterior = new int[0];
		private Bdac bdac = new Bdac();
		private List<BeatParameters> listaParametros = new List<BeatParameters>();
		private int d0,d1,d2 = 0;
		private QrsFilt filt = new QrsFilt();
		private int count = 0;
		private int pont = 0;
		
		//Hipercubos
		private PVCHipercubo pvcHipercubo = new PVCHipercubo();
		private NormalHipercubo normalHipercubo = new NormalHipercubo ();
		
	
		public AnalisadorHiperCubo ()
		{
			bdac.ResetBDAC();
		}
		public List<int> getListaDiferencas()
		{
			return null;
		}
		
		public void analisarTrecho(int[] amostras){
			amostras = atualizaAmostra(amostras);
			int DetectionTime = 0;
			
			if(count != 0)
				count =1;
			d0 = 0;
			
			for (int i = anterior.Length; i < amostras.Length-1; i++)
			{
				
                int fDatum = filt.filter(amostras[i]);
				int delay = bdac.BeatDetect(fDatum,i);
  				if (delay!= 0)
                {
					count ++;
					DetectionTime = i - delay;
					
					d0 = d1;
					d1 = d2;
					d2 = DetectionTime;
					
					if(count > 2)
					{			
						Console.Write((pont+DetectionTime).ToString()+" - ");
						listaParametros.Add(new BeatParameters(ArrayUtil.getSubArray(amostras,d0,d2),d1-d0));
					}
				}
				
			}
			pont+=4000;
			anterior = ArrayUtil.getSubArray(amostras,DetectionTime,amostras.Length-1);
			d2=1;
			amostras = null;
		}
		
		private int[] atualizaAmostra(int[] amostrasOriginal)
		{
			int[] meuArray = new int[anterior.Length+amostrasOriginal.Length];
			
			anterior.CopyTo(meuArray,0);
			amostrasOriginal.CopyTo(meuArray,anterior.Length);
			
			return meuArray;
			
		}
		
	
		public void realizaAnalise ()
		{
			foreach(BeatParameters beat in listaParametros)
			{
				normalHipercubo.comparaPertencimentoAoHipercubo(beat);
				pvcHipercubo.comparaPertencimentoAoHipercubo(beat);
				
			}
			
		}
		
		
	}

}